/**
 * \file CPontComptable.h
 * \author Corentin Le Bail
 * \date 2009-2012
 * \brief Fichier de déclaration des la class CPontComptable, CLignePont et CFacturePontComptable
 */
//------------------------------------------------------------------------------
#ifndef __CPONTCOMPTABLE_H__
#define __CPONTCOMPTABLE_H__
//------------------------------------------------------------------------------
#include <QString>
#include <QHash>
#include <QList>
#include <QDate>
//------------------------------------------------------------------------------
/**
 * \class CLignePont CPontComptable.h "CPontComptable.h"
 * \brief Classe des lignes de pont comptable
 */
class CLignePont
{
	public:
		/**
		 * \fn CLignePont(QString compte)
		 * \brief Constructeur
		 * \param[in] compte Numéro de compte
		 */
		CLignePont(QString compte) { _compte=compte; _montant=0; }
		
		/**
		 * \fn QString getCompte(void)
		 * \return Le numéro de compte associé à la ligne
		 */
		QString getCompte(void) { return _compte; }
		/**
		 * \fn double getDebit(void)
		 * \return Le montant au débit de la ligne
		 */
		double getDebit(void) { return (_montant < 0 ? -_montant : 0); }
		/**
		 * \fn void add(double value)
		 * \brief Ajoute un montant à la ligne de pont
		 * \param[in] value Le montant à ajouter
		 */
		void add(double value);
		/**
		 * \fn double getCredit(void)
		 * \return Le montant au crédit de la ligne
		 */
		double getCredit(void) { return (_montant > 0 ? _montant : 0); }
	private:
		QString _compte;
		double _montant;
		double _debit;
		double _credit;
};
//------------------------------------------------------------------------------
/**
 * \class CFacturePontComptable CPontComptable.h "CPontComptable.h"
 * \brief Classe des facture de pont comptable
 */
class CFacturePontComptable
{
	public:
		/**
		 * \fn CFacturePontComptable(int numFacture, QString compteClient, QString nomClient, QDate creation, QDate echeance, QString document)
		 * \brief Constructeur
		 * \param[in] numFacture Numéro de facture
		 * \param[in] compteClient Numéro de compte client
		 * \param[in] nomClient Nom du client
		 * \param[in] creation Date de la facture
		 * \param[in] echeance Date d'échéance de la facture
		 * \param[in] document Type de document ((F)acture ou (A)voir)
		 */
		CFacturePontComptable(int numFacture, QString compteClient, QString nomClient, QDate creation, QDate echeance, QString document);
		/**
		 * \fn int getNumFacture(void) 
		 * \return Le numéro de facture
		 */
		int getNumFacture(void) { return _numFacture; }
		/**
		 * \fn QString getCompteClient(void)
		 * \return Le numéro de compte client
		 */
		QString getCompteClient(void) { return _compteClient; }
		/**
		 * \fn QDate getCreation(void)
		 * \return La date de la facture
		 */
		QDate getCreation(void) { return _creation; }
		/**
		 * \fn QDate getEcheance(void)
		 * \return La date de d'échéance de la facture
		 */
		QDate getEcheance(void) { return _echeance; }
		/**
		 * \fn QString getDocument(void)
		 * \return Le type de document ((F)acture ou (A)voir)
		 */
		QString getDocument(void) { return _document; }
		/**
		 * \fn void addMontant(QString compte, double montant)
		 * \brief Ajoute un montant à une ligne de pont
		 * \param[in] compte Numéro du compte
		 * \param[in] montant Montant à ajouter
		 */
		void addMontant(QString compte, double montant);
		/**
		 * \fn QList<CLignePont *> getLignesPont(void) const
		 * \return La liste des ligne de pont pour la facture
		 */
		QList<CLignePont *> getLignesPont(void) const;
		/**
		 * \fn QString getNomClient(void)
		 * \return Le nom du client
		 */
		QString getNomClient(void) { return _nomClient; }
	private:
		int _numFacture;
		QString _compteClient;
		QDate _creation, _echeance;
		QString _document;
		QString _nomClient;
		
		QHash<QString, CLignePont *> lignesPont;
};
//------------------------------------------------------------------------------
/**
 * \class CPontComptable CPontComptable.h "CPontComptable.h"
 * \brief Classe des ponts comptable
 */
class CPontComptable
{
	public:
		/**
		 * \fn CPontComptable(int numPont)
		 * \brief Constructeur
		 * \param[in] numPont Numéro du pont
		 */
		CPontComptable(int numPont) { _numPont=numPont; }
		/**
		 * \fn int getNumPont(void) 
		 * \return Le numéro du pont
		 */
		int getNumPont(void) { return _numPont; }
		/**
		 * \fn void create(void)
		 * \brief Créer le pont comptable
		 */
		void create(void);
		/**
		 * \fn void save(void)
		 * \brief Sauve le pont comptable
		 */
		void save(void);
	private:
		int _numPont;
		
		QHash<int, CFacturePontComptable *> factures;
};
//------------------------------------------------------------------------------
#endif //__CPONTCOMPTABLE_H__
//------------------------------------------------------------------------------
